接著上Remote 1來介紹,資料同步的另一種方法pull。
我們在遠端server master branch創建一個 git_pull_test.txt,此時跟local端不同步了,我們利用git pull直接將遠端server最新的commit合併到我們local端,透過ls,git log都可發現已經成功同步了。
但git pull有缺點
,就是原本是兩個過程,我們可能還可以做一些更動、修改
,但git pull是直接跳過過程去一個步驟完成,這樣中間也問題就很難去debug
。
如果我們用git fetch origin master,會獲取FETCH_HEAD,我們在此時可以去git diff FETCH_HEAD
比較local與遠端FETCH_HEAD的區別,看看到底改了哪裡,考慮是否需要git merge FETCH_HEAD,這樣有更彈性的處理。
除非我們很清楚遠端的修改,且確定遠端的修改並不會對我們的local有任何影響,如衝突等等...就可使用git pull。
第一題:
先利用git checkout -b test創建test分支並切換到test分支,再利用git push origin test就可以將local branch push test到遠端,此時點擊github的branch,就可以發現多出一個test得分支。
第二題:
如果local要同步遠端新創建的branch,或在現有的branch進行修改,就可利用git fetch (分支名)去同步。
git branch -a:可查詢到local所有的branch
git branch -d (分支名):可刪除指定local分支
-d,-D差別在於-D可以刪除沒有merge的branch,而-d無法
。
git push origin --delete (分支名) : 可以刪除遠端server(github)的branch
git branch -m (原分支名) (新分支名) : 可以重新命名 local branch。
而如果要改變遠端branch名字,需要先利用git checkout -b test2,創建一個local branch,接著再利用git branch -m test2 test3
,將local branch重命名,最後將重命名後的branch利用,git push origin test3
給push去遠端即可。
需要找到特定的歷史commit,commit message及commit number都不是很好記,所以這時候,我們就可以利用tag在特定的commit留下標註。
tag (標籤):即是對某個commit所做的標註。
標籤預設會對指定分支下所有commit做標註,而我們也可利用commit值,對特定commit做標註。如下圖:
git fetch -t : 可以獲取遠端的tag
git tag -l :可顯示目前所有的tag
git tag (標籤名) :在local創建 tag
git push --tag : 可以將local tag push至 遠端
git tag -d (標籤名) :可以刪除local標籤
git push origin : refs/tags/(標籤名) :可以刪除遠端tag